package com.example.blog.utils;

import org.springframework.util.DigestUtils;

import java.util.UUID;

public class SecurityUtils {
    public static void main(String[] args) {
        //用的32位，MD5的算法是固定的，所以生成的数字也是固定的
        String md5Str= DigestUtils.md5DigestAsHex("123456".getBytes());
        System.out.println(md5Str);

        String uuid= UUID.randomUUID().toString();//生成一个随机字符串，并且不会重复
        //下面的encry就是这样生成一个随机字符串，然后去和password去混合在一起
        System.out.println(uuid.replace("-",""));//把这里面的--改没，这样就喝密码格式差不多了
        System.out.println("存储的格式:"+encry("123456"));
//        System.out.println("123456");
//        boolean verify=verify("1234567",)
//1.存储随机盐值
// 2.存储加密后的密文
// 3.加密算法MD5
        System.out.println(verify("123456","2bfa2aa17e224780ba576d90268d3bfcd6faa5a8ea4b941c9318c60621f49baa"));
    }
    public static String encry(String password){
        //生产随机盐值
        String salt=UUID.randomUUID().toString().replace("-","");
        System.out.println(salt);
        //加密 盐值+明文
        String securityPassword=DigestUtils.md5DigestAsHex((salt+password).getBytes());
        //数据库中存储 盐值+密文(两个32位，拼64位)
        return salt+securityPassword;
    }
    //校验
    public static boolean verify(String inputPassword,String sqlPassword){
        if(sqlPassword==null||sqlPassword.length()!=64){
            return false;
        }
        String salt=sqlPassword.substring(0,32);
        //得到密文
        String securityPassword=DigestUtils.md5DigestAsHex((salt+inputPassword).getBytes());
        return (salt+securityPassword).equals(sqlPassword);

    }
}
